package com.yaorange.medical.service.impl;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.yaorange.medical.parser.api.factory.DeviceDataParseFactory;
import com.yaorange.medical.service.BreathDataService;
import com.yaorange.medical.vo.ParsedBreathRealVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @author coach tam
 * @email 327395128@qq.com
 * @values 坚持灵活 灵活坚持
 * @since 2024/6/12
 */
@Slf4j
@Service
public class BreathDataServiceImpl implements BreathDataService {

    @Resource
    private DeviceDataParseFactory<ParsedBreathRealVo> breathDataParseFactory;
    @Override
    public void parseAndSaveBreathData(String breathData) {
        long begin = System.currentTimeMillis();
        log.info("------------------------------------------");
        log.info("3.开始解析实时数据");
        //1.根据协议字典解析数据
        ParsedBreathRealVo parsedBreathRealVo = breathDataParseFactory.parseData(breathData);
        log.info("4.解析实时数据结束,耗时[{}]ms", System.currentTimeMillis() - begin);
        //2.保存到数据
        begin = System.currentTimeMillis();
        log.info("5.开始保存到数据库");
        //2.保存到数据
        saveDB(parsedBreathRealVo);
        log.info("6.保存到数据库结束,总共耗时[{}]ms", System.currentTimeMillis() - begin);
        log.info("------------------------------------------");
    }
    /**
     * 保存呼吸机数据到数据库
     *
     * @param parsedBreathRealVo 呼吸机实时数据
     */
    private void saveDB(ParsedBreathRealVo parsedBreathRealVo) {
        try {
            //1.保存呼吸机历史数据
            //2.保存呼吸机实时数据
            //3.保存呼吸机统计数据
            //4.保存呼吸机报警数据
        } catch (Exception e) {
            log.error("保存呼吸机数据到数据库失败", e);
            throw new RuntimeException(e);
        }
    }
    @Override
    public ParsedBreathRealVo getParsedBreathRealDataByRealId(String id) {
        return null;
    }
}
